// promise.all
// 参数可以看作是一个promise实例的集合
// 在其发挥作用时：
// 如果集合中的实例都resolve，那么则收集这些实例的resolve的结果
// 只要有一个报错，那么则返回第一个reject
const promiseAll = function (promises) {
    // 用来收集promises resolve 的结果
    let result = []
    // 用来计数 几个promise被resolve
    let count = 0
    return new Promise((resolve, reject) => {
        // 参数promises的长度
        let len = promises.length
        for (let index = 0; index < len; index++) {
            // 处理每一个promise对象
            Promise.resolve(promises[index]).then(res => {
                // 将结果放入数组
                result[index] = res
                count++
                // 如果相等 则证明所有实例全部为resolve
                // 返回resolve
                if (count === len) {
                    resolve(result)
                }
            })
                // 如果有reject 直接用catch捕捉 然后跳出循环
                .catch(reject)
        }
    })
}



// 测试案例
const p1 = Promise.resolve('p1')

const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('p2 延时一秒')
    }, 1000)
})
const p3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('p3 延时两秒')
    }, 2000)
})

// const p4 = Promise.reject('p4 rejected')

// const p5 = new Promise((resolve, reject) => {
//     setTimeout(() => {
//         reject('p5 rejected 延时1.5秒')
//     }, 1500)
// })



// promiseAll([p1, p4, p5])
//     .then(res => console.log(res))
//     .catch(err => console.log(err))

promiseAll([p1, p2, p3])
    .then(res => {
        console.log(res)
    })
    .catch(err => console.log(err))
